module.exports = function(app) {

	var EventoStatus = {
		"ELABORADA":{"idStatus":1,"descricao":"ELABORADA"}
		,"ENVIADA":{"idStatus":2,"descricao":"ENVIADA"}
		,"REPROVADA":{"idStatus":3,"descricao":"REPROVADA"}
		,"APROVADA":{"idStatus":4,"descricao":"APROVADA"}
		,"PENDENTE":{"idStatus":5,"descricao":"PENDENTE"}
		,"CANCELADA":{"idStatus":6,"descricao":"CANCELADA"}
		,"LIBERADA":{"idStatus":7,"descricao":"LIBERADA"}
	};

	return {
		"get":function(p_fnsuccess,p_fnerror){
			app.models.trimestre.find().exec().then(p_fnsuccess,p_fnerror);
		}
		,"getSemEventos":function(p_fnsuccess,p_fnerror){
			app.models.trimestre.find({},{
					"atividades":0
					/*"ano":1
					,"nrTrimestre":1
					,"snAberto":1
					,"datasLivres":1
					,"lancamentosAtividade":1
					,"dsTrimestre":1*/		
				}
			).exec().then(p_fnsuccess,p_fnerror);
		}
		,"getByIdPerfil":function(p_idPerfil,p_fnsuccess,p_fnerror){
			/*
			app.models.trimestre
    		.find({
    			"snAberto":"S"
    			,"atividades": {$elemMatch: {"idPerfil": p_idPerfil}}
    		}).exec(function(erro,data){
    			if(erro){
					p_fnerror(erro);
				}else{
					p_fnsuccess(data);
				};	
    		});
			*/

    		app.models.trimestre
    		.find({
    			"snAberto":"S"
    		},
    		{
		    	"ano":1
				,"nrTrimestre":1
				,"snAberto":1
				,"datasLivres":1
				//,"lancamentosAtividade": {$elemMatch: {"idPerfil": p_idPerfil}}
    			//,"atividades": {$elemMatch: {"idPerfil": p_idPerfil}}
				,"lancamentosAtividade":1
				,"atividades":1
    		}

    		).exec(function(erro,data){
    			if(erro){
					p_fnerror(erro);
				}else{
					p_fnsuccess(data);
				};	
    		});

    		/*	
    		app.models.trimestre
    		.where("snAberto","S")
    		.select({atividades: {$elemMatch: {"idPerfil": p_idPerfil}}})
    		.exec(function(erro,data){
    			if(erro){
					p_fnerror(erro);
				}else{
					p_fnsuccess(data);
				};	
    		});
			*/
    		/*
			app.models.trimestre.find({
					"snAberto":"S"

				}
			).exec().then(p_fnsuccess,p_fnerror);
			*/
		}			
		,"insert":function(p_trimestre,p_fnsuccess,p_fnerror) {		
			app.models.trimestre.create(p_trimestre).then(
				function(dta){				
					p_fnsuccess(dta._id);
				}
				,p_fnerror
			);
		}
		,"update":function(p_trimestre,p_fnsuccess,p_fnerror){
			app.models.trimestre.findByIdAndUpdate(p_trimestre._id,p_trimestre).exec().then(
				function(dta){
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
		,"delete":function(p_id,p_fnsuccess,p_fnerror) {
			app.models.trimestre.remove({"_id":p_id}).exec().then(
				function(){
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
		,"insertLancamentoPerfil":function(p_idTrimestre,p_lancamentoPerfil,p_fnsuccess,p_fnerror) {				
			app.models.trimestre.findById(p_idTrimestre,function(erro,data){
				if(erro){
					p_fnerror(erro);
				}else{
					var newdoc = data.lancamentosAtividade.create(p_lancamentoPerfil);
					//console.log(newdoc);
					data.lancamentosAtividade.push(newdoc);				
					data.save(function (err) {
						if(err){
							p_fnerror(err);
						}else{
							p_fnsuccess(newdoc._id);
						};
					});								
				};			
			});  
		}
		,"updateLancamentoPerfil":function(p_idTrimestre,p_lancamentoPerfil,p_fnsuccess,p_fnerror) {	
			app.models.trimestre.findOneAndUpdate(
				{ "_id": p_idTrimestre , "lancamentosAtividade._id": p_lancamentoPerfil._id }
				,{ "$set":{"lancamentosAtividade.$": p_lancamentoPerfil}}
				,function(err,doc) {
					if(err){
						p_fnerror(err);
					}else{
						p_fnsuccess(true);						
					}
				}
			);
		}
		,"deleteLancamentoPerfil":function(p_idTrimestre,p_idLancamentoPerfil,p_fnsuccess,p_fnerror) {						
			app.models.trimestre.findByIdAndUpdate(p_idTrimestre,{$pull:{"lancamentosAtividade":{_id:p_idLancamentoPerfil}}}).then(
				function(dta){		
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
		,"insertEvento":function(p_idTrimestre,p_evento,p_fnsuccess,p_fnerror) {				
			app.models.trimestre.findById(p_idTrimestre,function(erro,data){
				if(erro){
					p_fnerror(erro);
				}else{
					var newdoc = data.atividades.create(p_evento);
					//console.log(newdoc);
					data.atividades.push(newdoc);				
					data.save(function (err) {
						if(err){
							p_fnerror(err);
						}else{
							p_fnsuccess(newdoc._id);
						};							
					});								
				};			
			});  
		}
		,"updateEvento":function(p_idTrimestre,p_evento,p_fnsuccess,p_fnerror) {	
			app.models.trimestre.findOneAndUpdate(
				{ "_id": p_idTrimestre , "atividades._id": p_evento._id }
				,{ "$set":{"atividades.$": p_evento}}
				,function(err,doc) {
					if(err){
						p_fnerror(err);
					}else{
						p_fnsuccess(true);						
					}
				}
			);
		}
		,"deleteEvento":function(p_idTrimestre,p_idEvento,p_fnsuccess,p_fnerror) {						
			app.models.trimestre.findByIdAndUpdate(p_idTrimestre,{$pull:{"atividades":{_id:p_idEvento}}}).then(
				function(dta){		
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
	};
};